<template>
  
</template>

<script>
export default {
}
// 1.将要拷贝的数据obj以参数的形式传参
var obj = {
  name :"test",
  main:{
    aa:1,
    b:2
  },
  fn:function(){

  },
  friends:[1,2,3,[22,33]]
}
function copy(obj){
  let newobj = null
  //声明一个变量用来存储拷贝之后的内容
  //判断数据类型是否是复杂数据类型，如果是则调用自己，再次循环，
  // 如果不是，直接赋值
  //因为null不可以进行循环但类型又是object,所以需要对object进行判断
  if(typeof(obj) == 'object' && obj != null){
    // 声明一个变量用老存储拷贝出来的值，根据参数的具体数据类型声明不同的类型来存储
    newobj = obj instanceof Array? [] : {};
    //循环obj中的每一项，如果里面有复杂数据类型，则直接利用递归再次调用拷贝函数
    for(var i in obj){
      newobj[i] = copy(obj[i])
    }

  }else{
    newobj = obj
  }
  return newobj

}
var obj2 = copy(obj)
obj2.name = '修改成功'
obj2.main.aa = 100
console.log(obj,obj2)

</script>

<style>

</style>